package com.media.system.service;

import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

/**
 * 文件存储服务接口
 * 
 * @author Claude
 * @since 2024-01-20
 */
public interface FileStorageService {

    /**
     * 上传文件
     * 
     * @param file 文件
     * @param objectName 对象名称
     * @return 文件访问URL
     */
    String uploadFile(MultipartFile file, String objectName);

    /**
     * 上传文件
     * 
     * @param inputStream 文件流
     * @param objectName 对象名称
     * @param contentType 内容类型
     * @param fileSize 文件大小
     * @return 文件访问URL
     */
    String uploadFile(InputStream inputStream, String objectName, String contentType, long fileSize);

    /**
     * 删除文件
     * 
     * @param objectName 对象名称
     * @return 是否删除成功
     */
    boolean deleteFile(String objectName);

    /**
     * 获取文件访问URL
     * 
     * @param objectName 对象名称
     * @return 文件访问URL
     */
    String getFileUrl(String objectName);

    /**
     * 获取文件预签名URL
     * 
     * @param objectName 对象名称
     * @param expireTime 过期时间（秒）
     * @return 预签名URL
     */
    String getPresignedUrl(String objectName, int expireTime);

    /**
     * 检查文件是否存在
     * 
     * @param objectName 对象名称
     * @return 是否存在
     */
    boolean fileExists(String objectName);

    /**
     * 获取文件大小
     * 
     * @param objectName 对象名称
     * @return 文件大小
     */
    long getFileSize(String objectName);
}